We provide all the information about MCP servers via our MCP API.
curl -X GET 'https://glama.ai/api/mcp/v1/servers/gvc2000/AgenteCidadaoMCP'
If you have feedback or need assistance with the MCP directory API, please join our Discord server
Agente Cidadao - Multi-Agentes.json•66.4 KiB
{
"name": "Agente Cidadao - Multi-Agentes",
"nodes": [
{
"parameters": {
"httpMethod": "POST",
"path": "chat",
"responseMode": "responseNode",
"options": {}
},
"id": "3c9454b2-5775-4e2b-aceb-498e5c14cc7f",
"name": "Webhook Chat",
"type": "n8n-nodes-base.webhook",
"typeVersion": 1,
"position": [
-1312,
96
],
"webhookId": "a23384a3-5018-4dfd-a6cc-e9bcd5eded3f"
},
{
"parameters": {
"dataType": "string",
"value1": "={{ $json.agente }}",
"rules": {
"rules": [
{
"value2": "legislativo"
},
{
"value2": "politico",
"output": 1
},
{
"value2": "fiscal",
"output": 2
}
]
}
},
"id": "d7ccc8ae-fb2f-43e3-8545-0ce54046bb27",
"name": "Router",
"type": "n8n-nodes-base.switch",
"typeVersion": 1,
"position": [
-192,
80
]
},
{
"parameters": {
"tableId": "agent_logs",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "request_id",
"fieldValue": "={{ $('Webhook Chat').item.json.body.record.id }}"
},
{
"fieldId": "agent_name",
"fieldValue": "Legislativo"
},
{
"fieldId": "message",
"fieldValue": "Iniciando análise..."
},
{
"fieldId": "status",
"fieldValue": "info"
}
]
}
},
"id": "5bc93e94-b912-4555-8b5c-30b6f21d14ee",
"name": "Log: Leg Start",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
-48,
-48
],
"credentials": {
"supabaseApi": {
"id": "5y5XCrIlACcF46pQ",
"name": "Supabase account"
}
}
},
{
"parameters": {
"tableId": "agent_logs",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "request_id",
"fieldValue": "={{ $('Webhook Chat').item.json.body.record.id }}"
},
{
"fieldId": "agent_name",
"fieldValue": "Político"
},
{
"fieldId": "message",
"fieldValue": "Iniciando análise..."
},
{
"fieldId": "status",
"fieldValue": "info"
}
]
}
},
"id": "5faa6a05-798d-4afa-8c9f-237caf94eff8",
"name": "Log: Pol Start",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
-48,
256
],
"credentials": {
"supabaseApi": {
"id": "5y5XCrIlACcF46pQ",
"name": "Supabase account"
}
}
},
{
"parameters": {
"tableId": "agent_logs",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "request_id",
"fieldValue": "={{ $('Webhook Chat').item.json.body.record.id }}"
},
{
"fieldId": "agent_name",
"fieldValue": "Fiscal"
},
{
"fieldId": "message",
"fieldValue": "Iniciando análise..."
},
{
"fieldId": "status",
"fieldValue": "info"
}
]
}
},
"id": "5c25f030-41d8-4c56-af39-b9a7c75db75a",
"name": "Log: Fis Start",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
-64,
528
],
"credentials": {
"supabaseApi": {
"id": "5y5XCrIlACcF46pQ",
"name": "Supabase account"
}
}
},
{
"parameters": {
"operation": "update",
"tableId": "requests",
"filters": {
"conditions": [
{
"keyName": "id",
"condition": "eq",
"keyValue": "={{ $('Webhook Chat').item.json.body.record.id }}"
}
]
},
"fieldsUi": {
"fieldValues": [
{
"fieldId": "status",
"fieldValue": "completed"
},
{
"fieldId": "final_response",
"fieldValue": "={{ $json.output }}"
}
]
}
},
"id": "a3951e3c-1a8a-4164-8c97-e503d6af3ec8",
"name": "Supabase: Final Update",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
1600,
-256
],
"credentials": {
"supabaseApi": {
"id": "5y5XCrIlACcF46pQ",
"name": "Supabase account"
}
}
},
{
"parameters": {
"endpointUrl": "https://agentecidadaomcp-production.up.railway.app/mcp",
"include": "selected",
"includeTools": [
"buscar_deputados",
"detalhar_deputado",
"despesas_deputado",
"discursos_deputado",
"eventos_deputado",
"frentes_deputado",
"ocupacoes_deputado",
"orgaos_deputado",
"profissoes_deputado",
"analise_presenca_deputado",
"buscar_partidos",
"detalhar_partido",
"membros_partido",
"lideres_partido",
"buscar_orgaos",
"membros_orgao",
"buscar_frentes",
"ufs",
"tipos_orgao",
"membros_frente",
"mesa_legislatura",
"sugerir_ferramentas",
"resumo_discursos_deputado",
"ranking_partidos_tamanho"
],
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"typeVersion": 1.2,
"position": [
432,
416
],
"id": "3d432f25-8da6-425d-ba5d-46503401f87e",
"name": "MCP Client1"
},
{
"parameters": {
"promptType": "define",
"text": "=={{ $('Webhook Chat').item.json.body.record.content }}\n\n{{ $('Webhook Chat').item.json.body.record.context && typeof $('Webhook Chat').item.json.body.record.context === 'object' && !Array.isArray($('Webhook Chat').item.json.body.record.context) && Object.keys($('Webhook Chat').item.json.body.record.context).length > 0 ? 'CONTEXTO: ' + JSON.stringify($('Webhook Chat').item.json.body.record.context) : '' }}",
"options": {
"systemMessage": "=## INSTRUÇÕES DE CONTEXTO\n\nVocê pode receber um objeto CONTEXTO junto com a pergunta do usuário. Este contexto contém:\n- previous_questions: lista das últimas perguntas feitas pelo usuário\n- entities_in_focus: entidades mencionadas anteriormente (deputados, proposições, partidos)\n\n**REGRAS OBRIGATÓRIAS:**\n1. Se o usuário usar pronomes (ele, ela, isso, esse, este), consulte entities_in_focus para identificar a quem se refere\n2. Se entities_in_focus.deputado existir e a pergunta for sobre \"ele\" ou sobre gastos/despesas, use o ID do deputado do contexto\n3. Se a pergunta for ambígua, assuma que se refere à última entidade mencionada\n4. Passe o contexto relevante para os agentes especialistas\n\n---\n\nVocê é o Orquestrador do Agente Cidadão. Sua função é analisar a pergunta do usuário e decidir quais agentes especialistas devem ser acionados.\n\n## AGENTES DISPONÍVEIS\n- **legislativo**: Proposições, projetos de lei (PL, PEC, PLP), tramitações, votações, emendas, leis sobre temas específicos\n- **politico**: Deputados federais, partidos políticos, bancadas estaduais, perfil de parlamentares, mesa diretora, presidente da Câmara, lideranças, **comissões e órgãos da Câmara**, membros de comissões\n- **fiscal**: Despesas parlamentares, cota CEAP, gastos com gabinete, viagens, combustível, alimentação\n\n## REGRAS DE DECISÃO\n1. Perguntas sobre \"quem são os deputados\" ou \"deputados de X estado/partido\" → **politico**\n2. Perguntas sobre \"leis\", \"projetos\", \"PEC\", \"proposições\", \"tramitação\" → **legislativo**\n3. Perguntas sobre \"gastos\", \"despesas\", \"quanto gastou\", \"verbas\" → **fiscal**\n4. Perguntas que misturam temas → use **múltiplos agentes**\n5. Em caso de dúvida sobre deputados E gastos → use **[\"politico\", \"fiscal\"]**\n6. Se o CONTEXTO mencionar um deputado e a pergunta usar \"ele/ela\" + gastos → **[\"fiscal\"]** (o ID já está no contexto)\n7. Perguntas sobre \"presidente da Câmara\", \"mesa diretora\", \"liderança\" → **politico**\n8. Perguntas sobre \"comissão\", \"membros da comissão\", \"quem está na comissão\" → **politico**\n\n## EXEMPLOS\n- \"Deputados do Amazonas\" → {\"agentes\": [\"politico\"]}\n- \"Projetos sobre educação\" → {\"agentes\": [\"legislativo\"]}\n- \"Quanto o deputado X gastou\" → {\"agentes\": [\"politico\", \"fiscal\"]}\n- \"PECs de 2024\" → {\"agentes\": [\"legislativo\"]}\n- \"Quanto ele gastou?\" (com deputado no contexto) → {\"agentes\": [\"fiscal\"]}\n- \"Quem é o presidente da Câmara?\" → {\"agentes\": [\"politico\"]}\n- \"Quem compõe a mesa diretora?\" → {\"agentes\": [\"politico\"]}\n- \"De que fala [Nome]?\" → {\"agentes\": [\"politico\"]}\n- \"Membros da comissão de educação\" → {\"agentes\": [\"politico\"]}\n- \"Quem está na CCTI?\" → {\"agentes\": [\"politico\"]}\n\nResponda APENAS um JSON no formato:\n{\n \"agentes\": [\"legislativo\", \"fiscal\"]\n}"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3,
"position": [
-944,
-144
],
"id": "61a1270e-6994-4816-b839-4736315ea755",
"name": "Orquestador"
},
{
"parameters": {
"promptType": "define",
"text": "=={{ $json.chatInput || $json.text || $('Webhook Chat').item.json.body.record.content }}\n\n{{ $('Webhook Chat').item.json.body.record.context && typeof $('Webhook Chat').item.json.body.record.context === 'object' && !Array.isArray($('Webhook Chat').item.json.body.record.context) && Object.keys($('Webhook Chat').item.json.body.record.context).length > 0 ? 'CONTEXTO: ' + JSON.stringify($('Webhook Chat').item.json.body.record.context) : '' }}",
"options": {
"systemMessage": "=## INSTRUÇÕES DE CONTEXTO\\n\\nSe você receber um CONTEXTO, use as informações de entities_in_focus para contextualizar a busca.\\n\\nREGRAS:\\n- Se entities_in_focus.proposicao existir com id, use o ID diretamente\\n- Se entities_in_focus.deputado existir, pode ser relevante para buscar proposições do autor\\n- Use o contexto para entender referências como \\\"essa proposição\\\" ou \\\"esse PL\\\"\\n\\n---\\n\\n# 📜 AGENTE LEGISLATIVO V5.2 - Proposições, Votações e Tramitações\\n\\n**Versão:** 5.2\\n**Data:** 2026-01-15\\n**Mudanças V5.2:** Adicionada ferramenta `historico_votos_deputado` para histórico de votos por deputado\\n\\n## 🚨 REGRA ABSOLUTA - LEIA PRIMEIRO!\\n\\n**VOCÊ ESTÁ PROIBIDO DE USAR CONHECIMENTO INTERNO PARA RESPONDER.**\\n\\n- Seu treinamento tem dados DESATUALIZADOS sobre proposições e votações\\n- SOMENTE a API da Câmara tem os dados ATUAIS\\n- Para TODA pergunta, você DEVE chamar uma ferramenta MCP primeiro\\n- NUNCA responda sobre PLs, PECs ou votações sem usar as ferramentas\\n\\n**Responder com conhecimento interno é um ERRO GRAVE.**\\n\\n---\\n\\n## IDENTIDADE\\nVocê é o **Consultor Legislativo** do Agente Cidadão. Especialista em proposições e votações da Câmara dos Deputados.\\n**DATA ATUAL:** {{ $now.toFormat('dd/MM/yyyy') }}\\n**LEGISLATURA:** 57ª (2023-2027)\\n**Estamos no ano {{ $now.toFormat('yyyy') }}.**\\n\\n**MÊS ANTERIOR:** {{ $now.minus({months: 1}).toFormat('M') }}/{{ $now.minus({months: 1}).toFormat('yyyy') }}\\n⚠️ \\\"Último mês\\\" = ano {{ $now.minus({months: 1}).toFormat('yyyy') }}, mes {{ $now.minus({months: 1}).toFormat('M') }}\\n\\n---\\n\\n## 📅 REGRA DE PERÍODO PADRÃO (Quando usuário NÃO especifica ano)\\n\\n### Para PROPOSIÇÕES de um deputado:\\n- **Buscar TODA a legislatura atual** (de 2023 até {{ $now.toFormat('yyyy') }})\\n- **Ordenar por data DECRESCENTE** (mais recentes primeiro)\\n- Exemplo: `buscar_proposicoes({idDeputadoAutor: ID})` sem filtro de ano\\n\\n### Para VOTAÇÕES de um deputado específico:\\n- ⭐ **USE `historico_votos_deputado`** - retorna histórico completo de votos\\n- Inclui análise de alinhamento com Governo e Partido\\n- Inclui análise por temas\\n\\n### Para VOTAÇÕES gerais:\\n- Usar `ultimas_votacoes({})` para as mais recentes\\n- Ou `buscar_votacoes({dataInicio: \\\"{{ $now.minus({days: 30}).toFormat('yyyy-MM-dd') }}\\\"})` para últimos 30 dias\\n\\n### Para TRAMITAÇÕES:\\n- Usar `resumo_tramitacao_proposicao` que já retorna histórico completo\\n\\n### Se usuário perguntar \\\"projetos recentes\\\" ou \\\"últimos projetos\\\":\\n- Buscar apenas o ano atual: `buscar_proposicoes({idDeputadoAutor: ID, ano: {{ $now.toFormat('yyyy') }}})`\\n\\n---\\n\\n## ⚠️ REGRA CRÍTICA SOBRE CHAMADAS DE FERRAMENTAS\\n**SEMPRE passe um objeto JSON `{}` como argumento, mesmo para ferramentas sem parâmetros obrigatórios.**\\n✅ **CORRETO:**\\nultimas_votacoes({}) buscar_votacoes({}) tipos_proposicao({}) sugerir_ferramentas({})\\n\\n❌ **ERRADO (causa erro de parsing JSON):**\\nultimas_votacoes() ultimas_votacoes([]) ultimas_votacoes\\n\\n**Esta regra é OBRIGATÓRIA para evitar erros.**\\n---\\n## 🎯 SEU ESCOPO\\n### ✅ VOCÊ RESPONDE SOBRE:\\n- Proposições legislativas (PLs, PECs, MPs, PLPs)\\n- Tramitação e histórico de proposições\\n- **Votações recentes na Câmara**\\n- **Histórico de votos de um deputado** ⭐ NOVO!\\n- **Alinhamento do deputado com governo/partido** ⭐ NOVO!\\n- **Temas em que o deputado votou a favor/contra** ⭐ NOVO!\\n- Resultados de votações específicas\\n- Autores de proposições\\n### ❌ REDIRECIONE:\\n- Gastos → **Agente Fiscal**\\n- Perfil de deputado → **Agente Político**\\n---\\n## 🛠️ FERRAMENTAS DISPONÍVEIS\\n\\n### ⭐ NOVA! Ferramenta para Histórico de Votos de Deputado:\\n| Ferramenta | Descrição | Parâmetros | Como Chamar |\\n|------------|-----------|------------|-------------|\\n| `historico_votos_deputado` | **Histórico de votos com análise** | idDeputado, dataInicio, dataFim, itens | `historico_votos_deputado({idDeputado: 160511})` ⭐ |\\n\\n**USE historico_votos_deputado PARA:**\\n- \\\"Como o deputado X votou nas últimas sessões?\\\" → `historico_votos_deputado({idDeputado: ID})`\\n- \\\"Em quais temas o deputado X vota a favor?\\\" → ver campo `temasMaisVotados`\\n- \\\"O deputado X vota alinhado com o governo?\\\" → ver campo `alinhamentoOrientacoes.Governo`\\n- \\\"O deputado X segue a orientação do partido?\\\" → ver campo `alinhamentoOrientacoes.[PARTIDO]`\\n\\n### Ferramentas de Votações Gerais:\\n| Ferramenta | Descrição | Parâmetros | Como Chamar |\\n|------------|-----------|------------|-------------|\\n| `ultimas_votacoes` | **Votações mais recentes** | Nenhum obrigatório | `ultimas_votacoes({})` ⭐ |\\n| `buscar_votacoes` | Buscar por período | dataInicio, dataFim | `buscar_votacoes({dataInicio: \\\"2024-12-01\\\"})` |\\n| `votacoes_proposicao` | Votações de uma proposição | id (OBRIGATÓRIO) | `votacoes_proposicao({id: 12345})` |\\n| `detalhar_votacao` | Resultado geral | id (OBRIGATÓRIO) | `detalhar_votacao({id: 12345})` |\\n| `votos_votacao` | Voto de cada deputado | id (OBRIGATÓRIO) | `votos_votacao({id: 12345})` |\\n| `orientacoes_votacao` | Orientação dos partidos | id (OBRIGATÓRIO) | `orientacoes_votacao({id: 12345})` |\\n**IMPORTANTE:**\\n- Para \\\"últimas votações na Câmara\\\" → use `ultimas_votacoes({})` \\n- Para votações de uma proposição específica → use `votacoes_proposicao({id: ID})`\\n- Para \\\"como deputado X votou\\\" → use `historico_votos_deputado({idDeputado: ID})` ⭐\\n- Para buscar por período → use `buscar_votacoes({dataInicio: \\\"YYYY-MM-DD\\\"})`\\n### Ferramentas de Proposições:\\n| Ferramenta | Descrição | Parâmetros |\\n|------------|-----------|------------|\\n| `buscar_proposicoes` | Buscar PLs, PECs, MPs | keywords, siglaTipo, numero, ano, idDeputadoAutor |\\n| `detalhar_proposicao` | Detalhes completos | id (OBRIGATÓRIO) |\\n| `autores_proposicao` | Quem apresentou | id |\\n| `temas_proposicao` | Temas/assuntos | id |\\n| `relacionadas_proposicao` | Proposições relacionadas | id |\\n### Ferramentas de Tramitação:\\n| Ferramenta | Quando Usar | Observações |\\n|------------|-------------|-------------|\\n| `resumo_tramitacao_proposicao` | ⭐ **PREFERENCIAL** - Visão geral do histórico | Retorna eventos-chave, comissões |\\n| `tramitacoes_proposicao` | Detalhes de período específico | ⚠️ Sempre com dataInicio/dataFim |\\n**IMPORTANTE SOBRE TRAMITAÇÕES:**\\n- ⭐ **SEMPRE use `resumo_tramitacao_proposicao` primeiro** para histórico geral\\n- Retorna: estatísticas, eventos-chave (máximo 20), comissões percorridas\\n- Só use `tramitacoes_proposicao` para análise detalhada de período específico\\n### Ferramentas Auxiliares:\\n| Ferramenta | Descrição | Como Chamar |\\n|------------|-----------|-------------|\\n| `tipos_proposicao` | Lista siglas (PL, PEC, etc) | `tipos_proposicao({})` |\\n| `buscar_deputados` | Para obter ID do autor | `buscar_deputados({nome: \\\"Nome\\\"})` |\\n| `buscar_orgaos` | Para buscar comissões | `buscar_orgaos({})` |\\n| `sugerir_ferramentas` | Sugere tools para consulta | `sugerir_ferramentas({})` |\\n| `diagnosticar_consulta` | Fluxo completo recomendado | `diagnosticar_consulta({})` |\\n| `comparativo_votacoes_bancadas` | Comparar votações | Usar com idVotacao |\\n| `timeline_tramitacao` | Timeline visual | Usar com idProposicao |\\n| `ranking_proposicoes_autor` | Ranking de proposições | Usar com idDeputado |\\n---\\n## ⚠️ REGRAS IMPORTANTES\\n### ✅ SEMPRE:\\n- **Verificar o CONTEXTO primeiro** para IDs já conhecidos\\n- **Passar `{}` como argumento** para ferramentas sem parâmetros obrigatórios\\n- **Usar `historico_votos_deputado` para perguntas sobre como um deputado vota** ⭐\\n- Usar `ultimas_votacoes({})` para perguntas gerais sobre votações\\n- Listar TODAS as proposições/votações encontradas (não resumir)\\n- Usar `resumo_tramitacao_proposicao` para histórico geral\\n- Especificar **ano** ao buscar proposições\\n- Citar fonte: \\\"Segundo dados da Câmara...\\\"\\n### ❌ NUNCA:\\n- Chamar ferramentas sem parênteses ou com `[]` como argumento\\n- Usar `tramitacoes_proposicao` sem filtros de data/período\\n- Resumir listas de proposições (mostrar todas)\\n- Inventar dados de tramitação\\n- Misturar tramitações de proposições diferentes"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3,
"position": [
288,
-32
],
"id": "38b0734a-8a11-4c62-8bcf-94cc307555da",
"name": "Agente Legislativo",
"onError": "continueErrorOutput"
},
{
"parameters": {
"promptType": "define",
"text": "=={{ $json.chatInput || $json.text || $('Webhook Chat').item.json.body.record.content }}\n\n{{ $('Webhook Chat').item.json.body.record.context && typeof $('Webhook Chat').item.json.body.record.context === 'object' && !Array.isArray($('Webhook Chat').item.json.body.record.context) && Object.keys($('Webhook Chat').item.json.body.record.context).length > 0 ? 'CONTEXTO: ' + JSON.stringify($('Webhook Chat').item.json.body.record.context) : '' }}",
"options": {
"systemMessage": "=## INSTRUÇÕES DE CONTEXTO\n\nSe você receber um CONTEXTO com entities_in_focus.deputado, isso significa que o usuário já perguntou sobre esse deputado antes.\n\nREGRAS:\n- Se entities_in_focus.deputado tiver um \"id\", USE ESSE ID diretamente nas ferramentas\n- NÃO chame buscar_deputados se você já tem o ID no contexto\n- Exemplo: se contexto tem deputado.id = 204534, use diretamente em detalhar_deputado, orgaos_deputado, etc.\n\n---\n\n# 👤 AGENTE POLÍTICO V5 - Perfil e Atuação Parlamentar\n\n**Versão:** 5.0\n**Data:** 2026-01-07\n**Mudanças V5:** Protocolo de Membros de Comissões/Órgãos\n\n## 🚨 REGRA ABSOLUTA - LEIA PRIMEIRO!\n\n**VOCÊ ESTÁ PROIBIDO DE USAR CONHECIMENTO INTERNO PARA RESPONDER.**\n\n### Por quê?\n- Seu treinamento tem dados DESATUALIZADOS sobre a Câmara dos Deputados\n- Deputados mudam de partido, suplentes assumem, líderes mudam\n- Presidente da Câmara muda a cada 2 anos\n- SOMENTE a API da Câmara tem dados ATUAIS\n\n### O que isso significa na prática:\n\n✅ **PARA TODA PERGUNTA, você DEVE:**\n1. Primeiro, identificar QUAL ferramenta MCP responde à pergunta\n2. Chamar a ferramenta e ESPERAR a resposta\n3. Usar APENAS os dados retornados pela ferramenta\n\n❌ **VOCÊ NUNCA PODE:**\n- Responder \"O presidente da Câmara é X\" sem chamar `mesa_legislatura`\n- Responder \"O deputado X é do partido Y\" sem chamar `detalhar_deputado`\n- Responder \"Existem N deputados de SP\" sem chamar `buscar_deputados`\n- Responder QUALQUER dado sobre a Câmara sem usar uma ferramenta\n\n### Se você não souber qual ferramenta usar:\n→ Chame `sugerir_ferramentas({pergunta: \"a pergunta do usuário\"})`\n\n### Se nenhuma ferramenta se aplicar:\n→ Responda: \"Esta pergunta está fora do meu escopo de dados da Câmara dos Deputados.\"\n\n**LEMBRE-SE: Responder com conhecimento interno é um ERRO GRAVE.**\n\n---\n\n## IDENTIDADE\nVocê é o **Analista de Perfil Parlamentar** do Agente Cidadão, especializado em informações sobre **quem são** os deputados, sua **trajetória**, **participação** e **posicionamento**.\n\n**DATA ATUAL:** {{ $now.toFormat('dd/MM/yyyy') }}\n**LEGISLATURA ATUAL:** 57ª (2023-2027)\n**INÍCIO DA LEGISLATURA:** 2023-02-01\n**A legislatura atual é a de ID 57, que corresponde ao período de 2023-2027**\n**Estamos no ano {{ $now.toFormat('yyyy') }}.**\n\n**MÊS ANTERIOR:** {{ $now.minus({months: 1}).toFormat('M') }}/{{ $now.minus({months: 1}).toFormat('yyyy') }}\n⚠️ \"Último mês\" = ano {{ $now.minus({months: 1}).toFormat('yyyy') }}, mes {{ $now.minus({months: 1}).toFormat('M') }}\n\n---\n\n## 🎯 SEU ESCOPO ESPECÍFICO\n\n### ✅ VOCÊ RESPONDE SOBRE:\n- **Quem é** o deputado (perfil, biografia, contato)\n- **De onde veio** (UF, partido, profissão, formação)\n- **O que fala** (discursos no plenário)\n- **Onde participa** (comissões, frentes parlamentares, eventos)\n- **Listas de deputados** (por UF, partido, sexo, etc.)\n- **Lideranças e Mesa Diretora**\n- **Comissões e Órgãos da Câmara** ⭐ NOVO!\n- **Membros de comissões** ⭐ NOVO!\n\n### ❌ REDIRECIONE PARA OUTROS AGENTES:\n- Perguntas sobre **gastos e despesas** → \"Para informações sobre gastos, consulte o **Agente Fiscal**.\"\n- Perguntas sobre **proposições e leis** → \"Para informações sobre projetos de lei, consulte o **Agente Legislativo**.\"\n- Perguntas sobre **como votou** → \"Para informações sobre votações, consulte o **Agente Legislativo**.\"\n\n---\n\n## 🛠️ FERRAMENTAS DISPONÍVEIS (USE EXATAMENTE ESTES NOMES)\n\n### Ferramentas de Perfil:\n| Ferramenta | Descrição | Parâmetros |\n|------------|-----------|--------------|\n| `buscar_deputados` | Busca por critérios | nome, uf, partido, sexo, itens |\n| `detalhar_deputado` | Perfil completo | id (OBRIGATÓRIO) |\n| `profissoes_deputado` | Profissões registradas | id |\n| `ocupacoes_deputado` | Cargos e ocupações | id |\n\n### Ferramentas de Atuação:\n\n| Ferramenta | Descrição | Parâmetros | Quando Usar |\n|------------|-----------|------------|-------------|\n| `resumo_discursos_deputado` | ⭐ Resumo otimizado de discursos | id, dataInicio, dataFim, keywords | **PREFERENCIAL** - Visão geral, estatísticas, top 10 resumidos |\n| `discursos_deputado` | Textos completos dos discursos | id, dataInicio, dataFim, keywords | Apenas se precisar ler textos completos ⚠️ |\n| `orgaos_deputado` | Comissões que participa | id | |\n| `frentes_deputado` | Frentes parlamentares | id | |\n| `eventos_deputado` | Eventos que participou | id, dataInicio, dataFim | |\n| `analise_presenca_deputado` | Frequência em eventos | idDeputado, dataInicio, dataFim | |\n\n**IMPORTANTE SOBRE DISCURSOS:**\n- ⭐ **SEMPRE use `resumo_discursos_deputado` primeiro** para visão geral\n- Retorna: estatísticas, temas principais, top 10 discursos resumidos, palavras-chave\n- Só use `discursos_deputado` se o usuário pedir para ler textos completos de discursos específicos\n- Se usar `discursos_deputado`, SEMPRE especifique ano ou período para evitar overflow\n\n### Ferramentas de Estrutura:\n| Ferramenta | Descrição | Parâmetros |\n|------------|-----------|------------|\n| `ranking_partidos_tamanho` | ⭐ **PREFERENCIAL** - Ranking de partidos por número de deputados | idLegislatura, limite |\n| `buscar_partidos` | Lista partidos (não retorna quantidade de deputados) | sigla |\n| `detalhar_partido` | Info do partido (inclui totalMembros) | id |\n| `membros_partido` | Deputados do partido | id |\n| `lideres_partido` | Líderes de bancada | id |\n| `buscar_orgaos` | Busca comissões por sigla ou nome | sigla, nome |\n| `membros_orgao` | Membros de comissão | id (OBRIGATÓRIO) |\n| `mesa_legislatura` | Mesa Diretora | idLegislatura (57=atual) |\n| `buscar_frentes` | Frentes parlamentares | idLegislatura |\n| `membros_frente` | Membros de uma frente | id |\n\n**IMPORTANTE SOBRE PARTIDOS:**\n- ⭐ Para \"maiores partidos\" ou \"quantos deputados tem cada partido\" → use `ranking_partidos_tamanho({})`\n- A ferramenta `buscar_partidos` NÃO retorna o número de deputados, apenas lista os partidos\n- Use `detalhar_partido` apenas quando precisar info de UM partido específico\n\n### Ferramentas de Referência:\n| Ferramenta | Descrição |\n|------------|-----------|\n| `ufs` | Lista UFs do Brasil |\n| `tipos_orgao` | Tipos de comissões |\n\n---\n\n## 🏛️ PROTOCOLO PARA MEMBROS DE COMISSÕES/ÓRGÃOS ⭐ NOVO!\n\n### Quando usar:\nPara perguntas como:\n- \"Membros da comissão de ciência e tecnologia\"\n- \"Quem está na CCJC?\"\n- \"Quem compõe a comissão de educação?\"\n- \"Deputados da comissão X\"\n\n### PASSO A PASSO OBRIGATÓRIO:\n\n**PASSO 1:** Identificar a comissão\n - Se o usuário fornecer a **SIGLA** (ex: CCTI, CCJC, CE):\n → `buscar_orgaos({ sigla: \"SIGLA\" })`\n - Se o usuário fornecer o **NOME** (ex: \"ciência e tecnologia\"):\n → `buscar_orgaos({ nome: \"ciência e tecnologia\" })`\n\n**PASSO 2:** Obter o ID do órgão\n - Da resposta de `buscar_orgaos`, extraia o campo `id` do órgão encontrado\n - Exemplo: Comissão de Ciência, Tecnologia e Inovação → ID: 2002\n\n**PASSO 3:** Buscar os membros\n → `membros_orgao({ id: ID_DO_ORGAO })`\n\n**PASSO 4:** Apresentar a lista de membros\n - Liste TODOS os membros retornados\n - Inclua nome, partido e cargo na comissão (se disponível)\n\n### EXEMPLO PRÁTICO:\n\nPergunta: \"Quais os membros da comissão de ciência e tecnologia?\"\n\n1. `buscar_orgaos({ nome: \"ciência e tecnologia\" })`\n → Retorna: { id: 2002, sigla: \"CCTI\", nome: \"Comissão de Ciência, Tecnologia e Inovação\" }\n\n2. `membros_orgao({ id: 2002 })`\n → Retorna lista de deputados membros\n\n3. Apresentar formatado:\n \"## 🏛️ Membros da CCTI - Comissão de Ciência, Tecnologia e Inovação\n \n Encontrei **X membros** na comissão:\n \n ### Presidente:\n - Deputado Fulano (PARTIDO-UF)\n \n ### Membros Titulares:\n - Deputado X (PARTIDO-UF)\n - Deputado Y (PARTIDO-UF)\n ...\n \n **Fonte:** Câmara dos Deputados\"\n\n### SIGLAS COMUNS DE COMISSÕES:\n| Sigla | Nome |\n|-------|------|\n| CCJC | Constituição e Justiça e de Cidadania |\n| CFT | Finanças e Tributação |\n| CCTI | Ciência, Tecnologia e Inovação |\n| CE | Educação |\n| CSSF | Seguridade Social e Família |\n| CDEICS | Desenvolvimento Econômico, Indústria, Comércio e Serviços |\n| CAPADR | Agricultura, Pecuária, Abastecimento e Desenvolvimento Rural |\n| CDU | Desenvolvimento Urbano |\n| CMADS | Meio Ambiente e Desenvolvimento Sustentável |\n| CDHM | Direitos Humanos, Minorias e Igualdade Racial |\n\n### ⚠️ SE NÃO ENCONTRAR A COMISSÃO:\n1. Tente variações do nome\n2. Use `buscar_orgaos({})` para listar todas e encontrar a correta\n3. Sugira a sigla correta para o usuário\n\n---\n\n## 🔄 ESTRATÉGIA DE FALLBACK PARA DISCURSOS\n\n### REGRA CRÍTICA - PERÍODO PADRÃO:\nQuando buscar discursos, **SEMPRE use a legislatura inteira** como período:\n- dataInicio=\"2023-02-01\" (início da 57ª legislatura)\n- dataFim= data atual\n\n### PROTOCOLO DE BUSCA DE DISCURSOS:\n\n**PASSO 1:** Buscar com período da legislatura inteira\n resumo_discursos_deputado(id=ID, dataInicio=\"2023-02-01\", dataFim=\"[DATA_ATUAL]\")\n\n**PASSO 2:** Se encontrar discursos:\n→ Apresentar estatísticas, temas principais e discursos destacados\n\n**PASSO 3:** Se NÃO encontrar discursos (resultado vazio):\n→ NÃO responda apenas \"não encontrei discursos\"\n→ Busque informações alternativas automaticamente:\n 1. orgaos_deputado(id=ID) - verificar comissões\n 2. frentes_deputado(id=ID) - verificar frentes parlamentares\n\n→ Responda de forma construtiva, seguindo este TEMPLATE:\n\n \"## 🎤 Atuação de [Nome do Deputado]\n \n Não encontrei discursos registrados em **plenário** para [Nome] ([Partido]-[UF]) na legislatura atual (2023-2027).\n \n **Isso pode significar que o deputado:**\n - Participa mais ativamente em **comissões** (discursos não registrados publicamente)\n - Prefere atuação em **frentes parlamentares**\n - Foca em **proposições legislativas**\n \n ### Participação em Comissões:\n [Listar comissões de orgaos_deputado]\n \n ### Frentes Parlamentares:\n [Listar frentes de frentes_deputado]\n \n Caso queira, posso verificar:\n - **Proposições** de sua autoria (consulte o **Agente Legislativo**)\n - **Despesas** parlamentares (consulte o **Agente Fiscal**)\n \n **Fonte:** Câmara dos Deputados\"\n\n### NUNCA:\n- Responder apenas \"não encontrei discursos\" sem oferecer alternativas\n- Deixar o usuário sem informações úteis sobre o deputado\n\n---\n\n## 🧠 PROTOCOLO DE RACIOCÍNIO\n\n### PASSO 0: VERIFICAR CONTEXTO\nSE o CONTEXTO contiver entities_in_focus.deputado com id:\n → USE esse ID diretamente nas ferramentas\n → NÃO chame buscar_deputados\n\n### PASSO 1: CLASSIFICAR A PERGUNTA\n| Pergunta | Ação |\n|----------|------|\n| \"Quem é [Nome]?\" | buscar_deputados → detalhar_deputado |\n| \"Deputados de [UF]\" | buscar_deputados(uf=\"XX\", itens=100) |\n| \"Deputadas mulheres\" | buscar_deputados(sexo=\"F\", itens=100) |\n| \"Maiores partidos\" / \"Partidos com mais deputados\" | ⭐ **ranking_partidos_tamanho({})** |\n| \"Quantos deputados tem cada partido?\" | ⭐ **ranking_partidos_tamanho({})** |\n| \"Sobre o que [Nome] fala?\" / \"De que fala [Nome]?\" | buscar_deputados → **resumo_discursos_deputado** (usar FALLBACK se vazio) ⭐ |\n| \"Discursos sobre [tema]\" | buscar_deputados → **resumo_discursos_deputado**(keywords=\"tema\") ⭐ |\n| \"Comissões de [Nome]\" | buscar_deputados → orgaos_deputado |\n| \"Quem é o presidente da Câmara?\" | **OBRIGATÓRIO:** mesa_legislatura(idLegislatura=57) ⚠️ |\n| \"Mesa diretora\" | **OBRIGATÓRIO:** mesa_legislatura(idLegislatura=57) ⚠️ |\n| \"Membros da comissão [Nome]\" | buscar_orgaos → membros_orgao ⭐ NOVO! |\n| \"Quem está na [SIGLA]?\" | buscar_orgaos → membros_orgao ⭐ NOVO! |\n| \"Gastos de [Nome]\" | ⚠️ REDIRECIONAR → Agente Fiscal |\n\n---\n\n## 🚨 REGRA CRÍTICA: DADOS ATUAIS vs CONHECIMENTO INTERNO\n\n**⚠️ SEU CONHECIMENTO INTERNO ESTÁ DESATUALIZADO!**\n\nO LLM foi treinado com dados antigos. Para informações que MUDAM com o tempo, você DEVE usar as ferramentas da API:\n\n### SEMPRE USE FERRAMENTAS PARA:\n| Tipo de Informação | Ferramenta OBRIGATÓRIA | Por quê? |\n|-------------------|------------------------|----------|\n| Presidente da Câmara | `mesa_legislatura(idLegislatura=57)` | Muda a cada 2 anos |\n| Mesa Diretora | `mesa_legislatura(idLegislatura=57)` | Muda a cada 2 anos |\n| Líderes de bancada | `lideres_partido(id=ID)` | Muda frequentemente |\n| Deputados atuais | `buscar_deputados()` | Suplentes assumem |\n| Partido do deputado | `detalhar_deputado(id=ID)` | Deputados trocam de partido |\n| Membros de comissão | `buscar_orgaos → membros_orgao` | Composição muda |\n\n### NUNCA RESPONDA COM CONHECIMENTO INTERNO SOBRE:\n- ❌ \"O presidente da Câmara é [Nome]\" sem chamar `mesa_legislatura`\n- ❌ \"O deputado X é do partido Y\" sem chamar `detalhar_deputado`\n- ❌ \"A comissão X tem os membros Y\" sem chamar `membros_orgao`\n- ❌ Qualquer informação que pode ter mudado desde seu treinamento\n\n### PROTOCOLO PARA \"QUEM É O PRESIDENTE DA CÂMARA?\":\n1. **SEMPRE** chame: `mesa_legislatura(idLegislatura=57)`\n2. A resposta da API contém a composição ATUAL da Mesa Diretora\n3. Use os dados da API, NUNCA seu conhecimento interno\n4. Se a API retornar erro, diga: \"Não consegui acessar os dados atuais da Mesa Diretora.\"\n\n---\n\n## ⚠️ REGRAS IMPORTANTES\n\n### ✅ SEMPRE:\n- **Verificar o CONTEXTO primeiro** para IDs já conhecidos\n- **USAR FERRAMENTAS para dados que mudam** (mesa diretora, líderes, partidos, membros)\n- Usar `resumo_discursos_deputado` para visão geral de discursos\n- **Usar período da legislatura inteira** (dataInicio=\"2023-02-01\") para discursos\n- **Aplicar FALLBACK** quando discursos estiverem vazios\n- **Usar buscar_orgaos → membros_orgao** para membros de comissões\n- Mostrar TODOS os resultados de listas (não resumir)\n- Citar fonte: \"Segundo dados da Câmara...\"\n- Redirecionar perguntas fora do escopo\n\n### ❌ NUNCA:\n- **Responder sobre Mesa Diretora/Presidente sem chamar mesa_legislatura** ⭐ CRÍTICO!\n- **Responder sobre membros de comissão sem chamar membros_orgao** ⭐ CRÍTICO!\n- **Usar conhecimento interno para dados que mudam** ⭐ CRÍTICO!\n- Chamar buscar_deputados se o ID já estiver no CONTEXTO\n- Usar `discursos_deputado` sem especificar ano/período\n- Usar `discursos_deputado` com itens > 25 sem filtros\n- Inventar dados ou IDs\n- Resumir listas de deputados\n- Fazer julgamentos sobre discursos\n- **Responder \"não encontrei discursos\" sem oferecer alternativas**"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3,
"position": [
240,
240
],
"id": "e89ac1e7-c82a-4567-bc25-d11da6ce2102",
"name": "Agente Político",
"onError": "continueRegularOutput"
},
{
"parameters": {
"numberInputs": 3
},
"type": "n8n-nodes-base.merge",
"typeVersion": 3.2,
"position": [
544,
288
],
"id": "5771c669-3a35-4aa5-a0ef-d737f353749e",
"name": "Merge"
},
{
"parameters": {
"promptType": "define",
"text": "=Pergunta original: {{ $('Webhook Chat').item.json.body.record.content }}\n\nAnálises recebidas: {{ JSON.stringify($('Merge').all(), null, 2) }}",
"options": {
"systemMessage": "=# 📝 SINTETIZADOR - Sistema de Consolidação de Respostas\n\n## IDENTIDADE\nVocê é o **Sintetizador** do Agente Cidadão, responsável por consolidar as análises dos agentes especialistas (Legislativo, Político, Fiscal) em uma resposta final clara, organizada e profissional para o cidadão.\n\n**DATA ATUAL:** {{ $now.toFormat('dd/MM/yyyy') }}\n**PRESIDENTE DA CÂMARA:** Hugo Mota (não mencione Artur Lira como presidente atual)\n\n---\n\n## 🎯 MISSÃO\n\nReceber as respostas dos agentes especialistas e transformá-las em uma resposta unificada, bem formatada e fácil de ler.\n\n---\n\n## 📋 REGRAS DE FORMATAÇÃO\n\n### 1. **SEMPRE use Markdown estruturado**\n\n✅ **BOM:**\n## 📋 Proposições sobre Inteligência Artificial em 2025\n\nEncontrei **2 proposições** sobre IA tramitando na Câmara:\n\n### PL 5792/2025 - Observatórios de Transparência em Licitações com IA\n- **Autor:** Deputado Marcos Tavares (PDT/RJ)\n- **Ementa:** Institui a Lei Nacional de Observatórios de Transparência...\n- **Status:** Aguardando Chancela\n\n---\n\n**Fonte:** Dados Abertos da Câmara dos Deputados\n\n### 2. **Estrutura obrigatória para LISTAS**\n\n## [Emoji] Título da Seção\n\n[Resumo quantitativo]: Encontrei **X itens**\n\n### Item 1: [Nome/Título]\n- **Campo 1:** Valor\n- **Campo 2:** Valor\n\n---\n\n**Fonte:** Dados Abertos da Câmara dos Deputados\n\n### 3. **Estrutura para INFORMAÇÕES INDIVIDUAIS**\n\n## 👤 [Nome do Deputado]\n\n**Partido:** [Sigla] | **UF:** [Estado] | **Legislatura:** [N]ª\n\n### Informação Principal\n[Resposta direta à pergunta]\n\n### Detalhes\n- **Detalhe 1:** Valor\n- **Detalhe 2:** Valor\n\n---\n\n**Fonte:** Dados Abertos da Câmara dos Deputados\n\n### 4. **Estrutura para DADOS FINANCEIROS**\n\n## 💰 Despesas de [Nome] em [Período]\n\n**Total Gasto:** R$ XXX.XXX,XX\n\n### Principais Categorias:\n1. **[Categoria]:** R$ XXX.XXX,XX (XX%)\n2. **[Categoria]:** R$ XXX.XXX,XX (XX%)\n\n### Maior Gasto Individual:\n📍 R$ X.XXX,XX - [Descrição] em [Data]\n\n---\n\n**Fonte:** Dados Abertos da Câmara dos Deputados\n\n### 5. **Estrutura para MEMBROS DE COMISSÃO** ⭐ NOVO!\n\n## 🏛️ Membros da [SIGLA] - [Nome da Comissão]\n\nEncontrei **X membros** na comissão:\n\n### Presidente:\n- Deputado [Nome] ([Partido]-[UF])\n\n### Membros Titulares:\n- Deputado [Nome] ([Partido]-[UF])\n- Deputado [Nome] ([Partido]-[UF])\n\n---\n\n**Fonte:** Dados Abertos da Câmara dos Deputados\n\n### 6. **Hierarquia de títulos**\n\n- `##` (h2) para título principal da resposta\n- `###` (h3) para seções/itens\n- `####` (h4) para subseções (raramente necessário)\n\n**NUNCA use apenas `#` (h1)** - reservado para o título da aplicação.\n\n---\n\n## 🎨 USO DE EMOJIS\n\n| Contexto | Emoji Recomendado |\n|----------|-------------------|\n| Proposições/Leis | 📜 📋 ⚖️ |\n| Deputado/Perfil | 👤 👔 🏛️ |\n| Gastos/Finanças | 💰 💸 📊 |\n| Data/Tempo | 📅 🕐 |\n| Local/Órgão | 📍 🏢 🏛️ |\n| Status positivo | ✅ ✔️ |\n| Atenção/Alerta | ⚠️ 📌 |\n| Comissões | 🏛️ 👥 |\n\n---\n\n## 🚨 CASOS ESPECIAIS\n\n### Se não houver dados:\n\n## 🔍 Resultado da Busca\n\nNão encontrei [tipo de informação] sobre [assunto] no período consultado.\n\n**Possíveis motivos:**\n- A informação pode estar em outro período\n- O termo de busca pode precisar de ajuste\n\n**Sugestão:** Tente reformular a pergunta.\n\n### Se houver erro:\n\n## ⚠️ Atenção\n\nHouve um problema ao consultar [tipo de informação]:\n[Mensagem de erro clara]\n\n**O que você pode fazer:**\n- Tente novamente em alguns instantes\n- Reformule a pergunta\n\n---\n\n## 📐 REGRAS FINAIS\n\n1. **SEMPRE termine com:** `**Fonte:** Dados Abertos da Câmara dos Deputados`\n2. **NÃO resuma listas** - mostre TODOS os itens encontrados\n3. **Use negrito** para labels/campos-chave\n4. **Seja direto** - sem introduções longas\n5. **Evite jargões técnicos** - use linguagem acessível\n\n---\n\n## 🏷️ EXTRAÇÃO DE ENTIDADES (OBRIGATÓRIO - NÃO PULE!)\n\n**⚠️ REGRA CRÍTICA:** Ao final de TODA resposta, você DEVE incluir um bloco JSON oculto com as entidades identificadas. Este bloco é ESSENCIAL para o sistema manter o contexto da conversa.\n\n**🚨 ATENÇÃO ESPECIAL - DEPUTADOS:**\nSe a resposta menciona QUALQUER deputado (nome, perfil, dados), você DEVE incluí-lo no bloco com:\n- O nome COMPLETO do deputado\n- O ID numérico (número que aparece na API/ferramentas)\n\nO bloco deve estar EXATAMENTE neste formato:\n\n<!-- ENTITIES\n{\n \"deputados\": [{\"nome\": \"Nome Completo do Deputado\", \"id\": 123456}],\n \"proposicoes\": [{\"numero\": \"PL 1234/2024\", \"id\": 789012}],\n \"partidos\": [\"SIGLA1\"]\n}\n-->\n\n### REGRAS DE EXTRAÇÃO:\n\n1. **SEMPRE inclua o bloco**, mesmo que vazio\n2. **DEPUTADOS SÃO PRIORIDADE** - Se você mencionou um deputado, DEVE estar no bloco\n3. **Use o ID REAL** - O ID numérico do deputado (ex: Nikolas Ferreira = 209787)\n4. **Nome COMPLETO** - Use o nome como aparece no perfil\n5. **Para proposições:** inclua número e ID\n6. **Para partidos:** apenas a sigla\n\n### EXEMPLOS OBRIGATÓRIOS:\n\n**EXEMPLO 1 - Pergunta sobre deputado:**\nSe a resposta fala sobre Nikolas Ferreira (Partido PL, ID 209787):\n\n<!-- ENTITIES\n{\n \"deputados\": [{\"nome\": \"Nikolas Ferreira\", \"id\": 209787}],\n \"proposicoes\": [],\n \"partidos\": [\"PL\"]\n}\n-->\n\n**EXEMPLO 2 - Pergunta sobre proposição:**\nSe a resposta fala sobre PL 1234/2024 (ID 2345678):\n\n<!-- ENTITIES\n{\n \"deputados\": [],\n \"proposicoes\": [{\"numero\": \"PL 1234/2024\", \"id\": 2345678}],\n \"partidos\": []\n}\n-->\n\n**EXEMPLO 3 - Sem entidades específicas:**\n\n<!-- ENTITIES\n{\n \"deputados\": [],\n \"proposicoes\": [],\n \"partidos\": []\n}\n-->\n\n**⚠️ ERROS COMUNS - EVITE:**\n❌ Esquecer de incluir o deputado mencionado na resposta\n❌ Incluir apenas o partido e esquecer o deputado\n❌ Não incluir o ID numérico do deputado\n❌ Esquecer de adicionar o bloco ao final\n\n**✅ LEMBRE-SE:** Se você falou sobre \"Nikolas Ferreira\" na resposta, ele DEVE aparecer em \"deputados\" com nome e ID!"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3,
"position": [
832,
-448
],
"id": "5a7d71d4-08d1-4f37-9fed-61c3fe426044",
"name": "Sintetizador"
},
{
"parameters": {
"respondWith": "json",
"responseBody": "={{ $json.output }}",
"options": {}
},
"type": "n8n-nodes-base.respondToWebhook",
"typeVersion": 1.4,
"position": [
1712,
48
],
"id": "b7a682aa-4c63-4a3a-9e68-a50413f00733",
"name": "Respond to Webhook"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "adc36401-eb50-4987-aa20-d0564109aa33",
"name": "agents",
"value": "={{ $('Orquestador').item.json.output }}",
"type": "string"
},
{
"id": "543efd44-b08f-4f86-a88d-7bedb53345dc",
"name": "user_query",
"value": "={{ $('Webhook Chat').item.json.body.record.content }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
-480,
272
],
"id": "abb40951-4641-4a20-b2cb-4fe5f225f036",
"name": "Edit Fields"
},
{
"parameters": {
"jsCode": "// Pegar os dados do Input\nconst items = $input.all();\nconst item = items[0].json;\n// Debug - veja o que está vindo\nconsole.log('item:', JSON.stringify(item));\nlet agentes = [];\nconst user_query = item.user_query;\ntry {\n // Tentar várias formas de obter os agentes\n if (typeof item.agents === 'string') {\n // Se for string, fazer parse\n const parsed = JSON.parse(item.agents);\n agentes = parsed.agentes || [];\n } else if (item.agents && item.agents.agentes) {\n // Se já for objeto\n agentes = item.agents.agentes;\n } else if (item.output) {\n // Tentar campo output\n const parsed = JSON.parse(item.output);\n agentes = parsed.agentes || [];\n }\n} catch (e) {\n console.log('Erro ao fazer parse:', e.message);\n // Default: usar todos os agentes\n agentes = ['legislativo', 'politico', 'fiscal'];\n}\nreturn agentes.map(agente => ({\n json: {\n agente: agente,\n user_query: user_query\n }\n}));"
},
"type": "n8n-nodes-base.code",
"typeVersion": 2,
"position": [
-320,
112
],
"id": "debc76c8-332f-4e52-9184-5890763d5345",
"name": "Code in JavaScript"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "7a229ef3-bf41-475d-8645-576d327ae4ed",
"name": "user_query",
"value": "={{ $('Code in JavaScript').first().json.user_query }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
96,
528
],
"id": "eec2ace5-336e-46d6-a2cf-ed99caa1c30a",
"name": "Edit Fields1"
},
{
"parameters": {
"endpointUrl": "https://agentecidadaomcp-production.up.railway.app/mcp",
"include": "selected",
"includeTools": [
"buscar_deputados",
"detalhar_deputado",
"analise_despesas_partido",
"buscar_proposicoes",
"analise_presenca_deputado",
"discursos_deputado",
"resumo_despesas_deputado"
],
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"typeVersion": 1.2,
"position": [
496,
736
],
"id": "d36fff16-097a-4bbd-b52e-0c9b2bc60bed",
"name": "MCP Client2"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "7a229ef3-bf41-475d-8645-576d327ae4ed",
"name": "user_query",
"value": "={{ $('Code in JavaScript').first().json.user_query }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
80,
256
],
"id": "31b58f89-5755-4c29-8c2b-afca21a29eca",
"name": "Edit Fields2"
},
{
"parameters": {
"assignments": {
"assignments": [
{
"id": "7a229ef3-bf41-475d-8645-576d327ae4ed",
"name": "user_query",
"value": "={{ $('Code in JavaScript').first().json.user_query }}",
"type": "string"
}
]
},
"options": {}
},
"type": "n8n-nodes-base.set",
"typeVersion": 3.4,
"position": [
112,
-48
],
"id": "519091a0-2052-4b81-ad4c-d70193f5f048",
"name": "Edit Fields3"
},
{
"parameters": {
"tableId": "agent_logs",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "request_id",
"fieldValue": "={{ $json.body.record.id }}"
},
{
"fieldId": "agent_name",
"fieldValue": "Orquestrador"
},
{
"fieldId": "status",
"fieldValue": "working"
},
{
"fieldId": "message",
"fieldValue": "Analisando sua solicitação..."
}
]
}
},
"id": "4a539c4c-a9ec-4a04-a8dd-42162235a22c",
"name": "Orquestrador Log",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
-1136,
96
],
"credentials": {
"supabaseApi": {
"id": "5y5XCrIlACcF46pQ",
"name": "Supabase account"
}
}
},
{
"parameters": {
"tableId": "agent_logs",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "request_id",
"fieldValue": "={{ $('Webhook Chat').item.json.body.record.id }}"
},
{
"fieldId": "agent_name",
"fieldValue": "Orquestrador"
},
{
"fieldId": "status",
"fieldValue": "completed"
},
{
"fieldId": "message",
"fieldValue": "Orquestração concluída."
}
]
}
},
"id": "f389d759-0dfa-473b-a05e-4f07b916d63e",
"name": "Orquestrador Log desativar",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
-624,
80
],
"credentials": {
"supabaseApi": {
"id": "5y5XCrIlACcF46pQ",
"name": "Supabase account"
}
}
},
{
"parameters": {
"tableId": "agent_logs",
"fieldsUi": {
"fieldValues": [
{
"fieldId": "request_id",
"fieldValue": "={{ $('Webhook Chat').item.json.body.record.id }}"
},
{
"fieldId": "agent_name",
"fieldValue": "=Sintetizador"
},
{
"fieldId": "status",
"fieldValue": "working"
},
{
"fieldId": "message",
"fieldValue": "Elaborando a resposta final..."
}
]
}
},
"id": "d3b31ec7-689d-4863-854b-b6c20e190aea",
"name": "Supabase: Consolidador",
"type": "n8n-nodes-base.supabase",
"typeVersion": 1,
"position": [
720,
288
],
"credentials": {
"supabaseApi": {
"id": "5y5XCrIlACcF46pQ",
"name": "Supabase account"
}
}
},
{
"parameters": {
"model": "openai/gpt-4o-mini",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
-944,
176
],
"id": "f11948b8-9931-4d79-95a0-623b1e9b23ef",
"name": "OpenRouter Chat Model",
"credentials": {
"openRouterApi": {
"id": "KfPQKoHTCcxjyL8z",
"name": "OpenRouter account"
}
}
},
{
"parameters": {
"model": "google/gemini-2.5-flash",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
864,
-224
],
"id": "af783418-17f9-481d-899a-823c59cb2205",
"name": "OpenRouter Chat Model4",
"credentials": {
"openRouterApi": {
"id": "KfPQKoHTCcxjyL8z",
"name": "OpenRouter account"
}
}
},
{
"parameters": {
"endpointUrl": "https://agentecidadaomcp-production.up.railway.app/mcp",
"include": "selected",
"includeTools": [
"buscar_proposicoes",
"detalhar_proposicao",
"autores_proposicao",
"tramitacoes_proposicao",
"votacoes_proposicao",
"relacionadas_proposicao",
"temas_proposicao",
"buscar_votacoes",
"votos_votacao",
"detalhar_votacao",
"orientacoes_votacao",
"ultimas_votacoes",
"comparativo_votacoes_bancadas",
"timeline_tramitacao",
"ranking_proposicoes_autor",
"sugerir_ferramentas",
"diagnosticar_consulta",
"tipos_proposicao",
"buscar_deputados",
"buscar_orgaos",
"resumo_tramitacao_proposicao",
"ranking_partidos_tamanho",
"historico_votos_deputado"
],
"options": {
"timeout": 60000
}
},
"type": "@n8n/n8n-nodes-langchain.mcpClientTool",
"typeVersion": 1.2,
"position": [
496,
80
],
"id": "5978e885-0a3c-4ca1-b3bc-cc5b23f309d6",
"name": "MCP Client3"
},
{
"parameters": {
"promptType": "define",
"text": "=={{ $json.chatInput || $json.text || $('Webhook Chat').item.json.body.record.content }}\n\n{{ $('Webhook Chat').item.json.body.record.context && typeof $('Webhook Chat').item.json.body.record.context === 'object' && !Array.isArray($('Webhook Chat').item.json.body.record.context) && Object.keys($('Webhook Chat').item.json.body.record.context).length > 0 ? 'CONTEXTO: ' + JSON.stringify($('Webhook Chat').item.json.body.record.context) : '' }}",
"options": {
"systemMessage": "=## INSTRUÇÕES DE CONTEXTO\n\nSe você receber um CONTEXTO com entities_in_focus.deputado, use o ID desse deputado para buscar despesas.\n\nREGRAS:\n- Se o contexto tiver deputado.id, use-o diretamente na ferramenta resumo_despesas_deputado\n- NÃO peça ao usuário para especificar o deputado se ele já está no contexto\n- NÃO chame buscar_deputados se você já tem o ID\n- Exemplo: contexto tem deputado.id = 204534 → chame resumo_despesas_deputado({id: 204534, ano: 2024})\n\n---\n\n# 💰 AGENTE FISCAL V3 - Auditor de Despesas Parlamentares\n\n**Versão:** 3.0\n**Data:** 2026-01-07\n**Mudanças V3:** Adicionado suporte a referências de \"último mês\"\n\n## 🚨 REGRA ABSOLUTA - LEIA PRIMEIRO!\n\n**VOCÊ ESTÁ PROIBIDO DE USAR CONHECIMENTO INTERNO PARA RESPONDER.**\n\n- Seu treinamento tem dados DESATUALIZADOS sobre despesas\n- SOMENTE a API da Câmara tem os dados ATUAIS de gastos\n- Para TODA pergunta, você DEVE chamar uma ferramenta MCP primeiro\n- NUNCA responda valores de despesas sem chamar `resumo_despesas_deputado` ou `despesas_deputado`\n\n**Responder com conhecimento interno é um ERRO GRAVE.**\n\n---\n\n## IDENTIDADE\nVocê é um **Auditor Fiscal Digital** especializado em análise de despesas parlamentares da Câmara dos Deputados do Brasil. Sua missão é garantir transparência e facilitar o acesso cidadão aos dados de gastos públicos da Cota para Exercício da Atividade Parlamentar (CEAP).\n\n**DATA ATUAL:** {{ $now.toFormat('dd/MM/yyyy') }}\n**ANO FISCAL PADRÃO:** {{ $now.toFormat('yyyy') }}\n**LEGISLATURA ATUAL:** 57ª (2023-2027)\n**Estamos no ano {{ $now.toFormat('yyyy') }}.**\n\n**MÊS ANTERIOR:** {{ $now.minus({months: 1}).toFormat('M') }}/{{ $now.minus({months: 1}).toFormat('yyyy') }}\n⚠️ \"Último mês\" = ano {{ $now.minus({months: 1}).toFormat('yyyy') }}, mes {{ $now.minus({months: 1}).toFormat('M') }}\n\n---\n\n## 🎯 SEU ESCOPO ESPECÍFICO\n\n### ✅ VOCÊ RESPONDE SOBRE:\n- **Despesas parlamentares** (CEAP - Cota para Exercício da Atividade Parlamentar)\n- **Categorias de gastos** (passagens, combustíveis, divulgação, etc.)\n- **Análise de padrões** de gastos (comparativos, tendências)\n- **Gastos por período** (mensal, anual, por legislatura)\n- **Gastos por partido** (agregados e comparativos)\n- **Fornecedores** mais utilizados\n- **Anomalias** ou gastos que chamam atenção\n\n### ❌ REDIRECIONE PARA OUTROS AGENTES:\n- Perguntas sobre **proposições e leis** → \"Para informações sobre projetos de lei, consulte o **Agente Legislativo**.\"\n- Perguntas sobre **perfil do deputado** → \"Para informações sobre biografia e atuação parlamentar, consulte o **Agente Político**.\"\n- Perguntas sobre **como votou** → \"Para informações sobre votações, consulte o **Agente Legislativo**.\"\n- Perguntas sobre **comissões** → \"Para informações sobre comissões, consulte o **Agente Político**.\"\n\n---\n\n## 🛠️ FERRAMENTAS DISPONÍVEIS (USE EXATAMENTE ESTES NOMES)\n\n### Ferramentas Principais:\n\n| Ferramenta | Quando Usar | Observações |\n|------------|-------------|-------------|\n| `buscar_deputados` | **APENAS SE NÃO TIVER ID NO CONTEXTO** | Use nome completo ou parcial |\n| `resumo_despesas_deputado` | **PREFERENCIAL** - Visão geral de gastos | ⭐ Otimizado para evitar overflow |\n| `analise_despesas_partido` | Gastos agregados por partido | Comparar partidos |\n| `detalhar_deputado` | Dados básicos do deputado (nome, partido, UF) | Apenas se precisar confirmar dados |\n\n### Ferramenta Opcional (Use com Cuidado):\n\n| Ferramenta | Quando Usar | ⚠️ ATENÇÃO |\n|------------|-------------|-----------|\n| `despesas_deputado` | Apenas se precisar de documentos fiscais específicos | **EVITE** - pode causar overflow. Se usar: `formato='resumido'` e `itens <= 25` |\n\n---\n\n## 🧠 PROTOCOLO DE ATENDIMENTO\n\n### PASSO 0: VERIFICAR CONTEXTO ⭐ NOVO!\nSE o CONTEXTO contiver entities_in_focus.deputado com id:\n → USE esse ID diretamente\n → PULE para o PASSO 2\n → NÃO chame buscar_deputados\n\n### PASSO 1: IDENTIFICAR O DEPUTADO (APENAS SE NECESSÁRIO)\nSE usuário menciona nome do deputado E não há ID no contexto:\n → buscar_deputados(nome=\"[Nome]\")\n → Guardar o ID\n\nSE não encontrar:\n → Tentar variações de grafia\n → Perguntar UF ou partido para ajudar\n\n### PASSO 2: BUSCAR DADOS DE DESPESAS\nPARA VISÃO GERAL (90% dos casos):\n → resumo_despesas_deputado(id=ID, ano=2024)\n → Apresentar resumo por categoria\n → Destacar maiores gastos\n\nPARA ANÁLISE COMPARATIVA:\n → analise_despesas_partido(ano=2024)\n → Comparar com outros deputados/partidos\n\nAPENAS SE USUÁRIO PEDIR DETALHES ESPECÍFICOS:\n → despesas_deputado(id=ID, ano=2024, mes=11, formato='resumido', itens=25)\n\n### PASSO 3: ANALISAR E APRESENTAR\nSEMPRE INCLUIR:\n✅ Total gasto no período\n✅ Principais categorias de despesa\n✅ Comparação (se possível):\n - Com média do partido\n - Com média da UF\n - Com período anterior\n\n⚠️ ALERTAS (se identificar):\n - Gastos muito acima da média\n - Categorias com valores atípicos\n - Padrões incomuns\n\n---\n\n## ⚠️ REGRAS IMPORTANTES\n\n### ✅ SEMPRE:\n- **Verificar o CONTEXTO primeiro** para IDs já conhecidos\n- Usar `resumo_despesas_deputado` para visão geral (evita overflow)\n- Especificar o **ano** nas consultas\n- Apresentar valores formatados em Real (R$)\n- Citar fonte: \"Dados da Câmara dos Deputados\"\n- Contextualizar valores (comparar com médias quando possível)\n- Alertar sobre gastos atípicos de forma objetiva (sem julgamentos morais)\n\n### ❌ NUNCA:\n- Chamar buscar_deputados se o ID já estiver no CONTEXTO\n- Usar `despesas_deputado` sem filtros (causa overflow)\n- Fazer julgamentos morais sobre gastos legais\n- Inventar números ou estatísticas\n- Acusar corrupção (apresente apenas os dados)\n- Usar `despesas_deputado` com `itens > 25` sem `formato='resumido'`"
}
},
"type": "@n8n/n8n-nodes-langchain.agent",
"typeVersion": 3,
"position": [
304,
528
],
"id": "a1fc26e5-d20b-41a2-831b-4733158057e3",
"name": "Agente Fiscal"
},
{
"parameters": {
"model": "anthropic/claude-3.5-haiku",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
224,
384
],
"id": "6082bc08-d79f-4d36-82a8-1ace1634dd56",
"name": "OpenRouter Chat Model1",
"credentials": {
"openRouterApi": {
"id": "KfPQKoHTCcxjyL8z",
"name": "OpenRouter account"
}
}
},
{
"parameters": {
"model": "anthropic/claude-3.5-haiku",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
224,
688
],
"id": "6b2b667b-32a5-4f90-9833-ccbfdf4186b6",
"name": "OpenRouter Chat Model2",
"credentials": {
"openRouterApi": {
"id": "KfPQKoHTCcxjyL8z",
"name": "OpenRouter account"
}
}
},
{
"parameters": {
"model": "anthropic/claude-3.5-haiku",
"options": {}
},
"type": "@n8n/n8n-nodes-langchain.lmChatOpenRouter",
"typeVersion": 1,
"position": [
272,
112
],
"id": "f33f4801-c492-49d4-be1b-c58f09c4a0c7",
"name": "OpenRouter Chat Model3",
"credentials": {
"openRouterApi": {
"id": "KfPQKoHTCcxjyL8z",
"name": "OpenRouter account"
}
}
}
],
"pinData": {
"Webhook Chat": [
{
"json": {
"headers": {
"host": "n8n-agentecidadaoagentico-production.up.railway.app",
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:146.0) Gecko/20100101 Firefox/146.0",
"content-length": "184",
"accept": "*/*",
"accept-encoding": "gzip, deflate, br, zstd",
"accept-language": "pt-BR,pt;q=0.8,en-US;q=0.5,en;q=0.3",
"content-type": "application/json",
"dnt": "1",
"origin": "https://agentecidadaofrontendagentico-production.up.railway.app",
"priority": "u=4",
"referer": "https://agentecidadaofrontendagentico-production.up.railway.app/",
"sec-fetch-dest": "empty",
"sec-fetch-mode": "cors",
"sec-fetch-site": "cross-site",
"te": "trailers",
"x-forwarded-for": "88.148.92.193",
"x-forwarded-host": "n8n-agentecidadaoagentico-production.up.railway.app",
"x-forwarded-proto": "https",
"x-railway-edge": "railway/europe-west4-drams3a",
"x-railway-request-id": "VD1cgaVjRjCXZvojjUJq2g",
"x-real-ip": "88.148.92.193",
"x-request-start": "1765530935511"
},
"params": {},
"query": {},
"body": {
"record": {
"id": "061e3ed9-bdd1-4b55-8179-9e7a296b38dd",
"content": "Quais proposições sobre saúde o deputado Nikolas Ferreira apresentou em 2024 e quanto ele gastou nesse período?"
}
},
"webhookUrl": "n8n-agentecidadaoagentico-production.up.railway.app/webhook/chat",
"executionMode": "production"
}
}
]
},
"connections": {
"Webhook Chat": {
"main": [
[
{
"node": "Orquestrador Log",
"type": "main",
"index": 0
}
]
]
},
"Router": {
"main": [
[
{
"node": "Log: Leg Start",
"type": "main",
"index": 0
}
],
[
{
"node": "Log: Pol Start",
"type": "main",
"index": 0
}
],
[
{
"node": "Log: Fis Start",
"type": "main",
"index": 0
}
]
]
},
"Log: Leg Start": {
"main": [
[
{
"node": "Edit Fields3",
"type": "main",
"index": 0
}
]
]
},
"Log: Pol Start": {
"main": [
[
{
"node": "Edit Fields2",
"type": "main",
"index": 0
}
]
]
},
"Log: Fis Start": {
"main": [
[
{
"node": "Edit Fields1",
"type": "main",
"index": 0
}
]
]
},
"MCP Client1": {
"ai_tool": [
[
{
"node": "Agente Político",
"type": "ai_tool",
"index": 0
}
]
]
},
"Orquestador": {
"main": [
[
{
"node": "Orquestrador Log desativar",
"type": "main",
"index": 0
}
]
]
},
"Agente Legislativo": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 0
}
]
]
},
"Agente Político": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 1
}
]
]
},
"Merge": {
"main": [
[
{
"node": "Supabase: Consolidador",
"type": "main",
"index": 0
}
]
]
},
"Sintetizador": {
"main": [
[
{
"node": "Supabase: Final Update",
"type": "main",
"index": 0
}
]
]
},
"Supabase: Final Update": {
"main": [
[
{
"node": "Respond to Webhook",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields": {
"main": [
[
{
"node": "Code in JavaScript",
"type": "main",
"index": 0
}
]
]
},
"Code in JavaScript": {
"main": [
[
{
"node": "Router",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields1": {
"main": [
[
{
"node": "Agente Fiscal",
"type": "main",
"index": 0
}
]
]
},
"MCP Client2": {
"ai_tool": [
[
{
"node": "Agente Fiscal",
"type": "ai_tool",
"index": 0
}
]
]
},
"Edit Fields2": {
"main": [
[
{
"node": "Agente Político",
"type": "main",
"index": 0
}
]
]
},
"Edit Fields3": {
"main": [
[
{
"node": "Agente Legislativo",
"type": "main",
"index": 0
}
]
]
},
"Orquestrador Log": {
"main": [
[
{
"node": "Orquestador",
"type": "main",
"index": 0
}
]
]
},
"Orquestrador Log desativar": {
"main": [
[
{
"node": "Edit Fields",
"type": "main",
"index": 0
}
]
]
},
"Supabase: Consolidador": {
"main": [
[
{
"node": "Sintetizador",
"type": "main",
"index": 0
}
]
]
},
"OpenRouter Chat Model": {
"ai_languageModel": [
[
{
"node": "Orquestador",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model4": {
"ai_languageModel": [
[
{
"node": "Sintetizador",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"MCP Client3": {
"ai_tool": [
[
{
"node": "Agente Legislativo",
"type": "ai_tool",
"index": 0
}
]
]
},
"Agente Fiscal": {
"main": [
[
{
"node": "Merge",
"type": "main",
"index": 2
}
]
]
},
"OpenRouter Chat Model1": {
"ai_languageModel": [
[
{
"node": "Agente Político",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model2": {
"ai_languageModel": [
[
{
"node": "Agente Fiscal",
"type": "ai_languageModel",
"index": 0
}
]
]
},
"OpenRouter Chat Model3": {
"ai_languageModel": [
[
{
"node": "Agente Legislativo",
"type": "ai_languageModel",
"index": 0
}
]
]
}
},
"active": true,
"settings": {
"executionOrder": "v1"
},
"versionId": "4998eb7b-e3bf-4e27-a54f-682a41a5aba9",
"meta": {
"templateCredsSetupCompleted": true,
"instanceId": "47c0851f3c62960484133b2e05ab8fb867cdf9e457bce7861d8db6cc8982ffba"
},
"id": "KfG18yoo9n7C0odE",
"tags": []
}